#pragma once

#include "Common.h"
#include "CentralCache.h"

class ThreadCache
{
public:
    // 申请内存和释放对象
    void *Allocate(size_t size);
    void Deallocate(void *ptr, size_t size);

    // 从中心缓存获取对象
    void *FetchFromCentralCache(size_t index, size_t size);

    // 释放对象时，链表过长时，回收内存回到中心缓存
	void ListTooLong(FreeList& list, size_t size);

private:
    FreeList _freelists[NFREELIST];
};


// TLS thread local storage
static __thread ThreadCache* pTLSThreadCache; // Linux环境下
// static _declspec(thread) ThreadCache* pTLSThreadCache = nullptr; // Windows环境下

